// 导入必要的模块

// dotenv: 用于从 .env 文件加载环境变量
require('dotenv').config();
// express: Web 应用框架
const express = require('express');
// cors: 处理跨域资源共享
const cors = require('cors');
// morgan: HTTP 请求日志记录
const morgan = require('morgan');
// cookie-parser: 解析 Cookie 头
const cookieParser = require('cookie-parser');
// 导入数据库连接配置
const connectDB = require('./config/db');

const swaggerUi = require('swagger-ui-express');
const swaggerSpecs = require('./config/swagger');

// 导入路由
const authRoutes = require('./routes/auth');
const postRoutes = require('./routes/posts');
const commentRoutes = require('./routes/comment');
// 创建 Express 应用实例
const app = express();

// 初始化数据库连接
connectDB();

// 配置中间件
// 启用 CORS
app.use(cors());
// 解析 JSON 请求体
app.use(express.json());
// 解析 URL 编码的请求体
app.use(express.urlencoded({ extended: false }));
// 解析 Cookie
app.use(cookieParser());
// 启用开发环境下的请求日志
app.use(morgan('dev'));
// Swagger UI
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpecs));


// 定义根路由
app.get('/', (req, res) => {
  res.json({ message: 'Welcome to Blog API' });
});

// 使用 authRoutes 路由
app.use('/api/auth', authRoutes);
// 使用 postRoutes 路由
app.use('/api/posts', postRoutes);
// 使用 commentRoutes 路由
app.use('/api/comments', commentRoutes);

// 全局错误处理中间件
// 捕获并处理所有未处理的错误
app.use((err, req, res, next) => {
  // 在控制台输出错误堆栈
  console.error(err.stack);
  // 返回 500 错误响应
  res.status(500).json({ message: 'Something went wrong!' });
});

// 导出 Express 应用实例
module.exports = app;